Genereller Suchhilfe-Exit zur Anzeige von Icons
Die Verwendung von grafischen Elementen im SAP-System ist doch arg eingeschränkt. Icons sind im Grunde die einzige Möglichkeit, etwas Farbe und Abwechslung in eine ALV-Liste zu bekommen. Schön ist es, wenn der Anwender selber einstellen kann, welche Icons zu welchen Informationen angezeigt werden sollen. Eine Status bietet sich perfekt an, um diesen durch ein geeignetes Icon visuell darzustellen.
Für die Definition des zu verwendenden Icons sollte jedoch der Name des Icons verwendet werden (ICON_OKAY, ICON_MESSAGE_INFORMATION etc) anstelle der entsprechenden Icon-ID (@0V@, @19@ usw). Der Vorteil der Icon-ID ist zwar, dass dann das Icon direkt angezeigt wird, wenn das Feld nicht Eingabe bereit ist, allerdings ist die ID überhaupt nicht sprechend und die Pflege wird zum Glücksspiel.
Wenn allerdings der Name des Icons verwendet wird, dann sieht man eben nur den Namen, aber nicht das zugehörige Icon.
Beispiel
Um zu verdeutlichen, wie ich die Icons einsetze, habe ich eine kleine Statustabelle definiert:
Der Text sollte natürlich besser in eine separat definierte Texttabelle ausgelagert werden, aber in diesem Fall soll es nur als Beispiel dienen.
Ich habe also eine Tabelle mit verschiedenen Status. Irgendein Eintrag/ Objekt kann einen dieser Status haben. In der Listausgabe wird zu einem Status der Name des zugeordneten Icons ermittelt und als Icon ausgegeben.
Darstellung eines Icons
Ein Icon besteht immer mindestens aus dem Icon selbst. Ein Icon muss immer Anfang eines Feldes stehen! Ich kann in jedem Anzeigefeld ein Icon ausgeben, indem ich die Icon-ID der Icons von zwei Klammeraffen umgeben eintrage: @1A@.
Ein Icon kann aber auch noch einen Text besitzen, der mit angezeigt wird. Ebenso kann ein Icon eine 40 Zeichen lange Quickinfo enthalten, die bei MouseOver angezeigt wird.
Erzeugen eines Icons
Der richtige Weg, um Icons für die Ausgabe in einem Feld vorzubereiten ist die Verwendung des Funktionsbausteins ICON_CREATE:
CALL FUNCTION 'ICON_CREATE' EXPORTING name = 'ICON_DELETE' text = 'Löschen' info = 'Markiertes Objekt löschen' add_stdinf = ' ' IMPORTING result = lv_icon EXCEPTIONS OTHERS = 3.
Dem Funktionsbaustein ist es egal, ob der Name oder die ID des Icons verwendet wird. Es kann also der Text “ICON_DELETE” übergeben werden oder die Konstante ICON_DELETE. Die Icon-Konstanten sind im Type-Pool ICON definiert und in jedem ABAP-Programm vorhanden.
Tipp:
Erstelle eine globale Klasse mit einer Methode, die dir das fertige Icon direkt zurück gibt. Die Erzeugung von Icons ist dann sehr einfach:
DATA(lv_icon) = zcl_icon=>create( icon_okay ).
Suchhilfe
Zurück zum Thema. Ich wollte ja eigentlich was ganz anderes…
Eine Suchhilfe zum Status wäre sehr sinnvoll:
- Der Anwender kann in einer ALV-Gridliste durch betätigen der F4-Hilfe auf dem Statusfeld alle möglichen Status sehen (Legende)
- Bei der Auswahl eines Status ist eine Suchhilfe sowieso sinnvoll.
Leider wird in diesem Fall ja nur der Name des Icons angezeigt und nicht das Icon selber. Das möchte ich ändern. Allerdings möchte ich nicht für genau diese eine Tabelle einen Suchhilfe-Exit basteln, der genau für diese Tabelle das Statusicon anzeigt. Ich möchte eine Suchhilfe erstellen, die für alle ähnlichen Tabellen ebenfalls verwendet werden kann.
Suchhilfe-Parameter
Zu diesem Zweck verwende ich die wenig bekannte Möglichkeit, in der Suchhilfe einen Parameter zu definieren. ein Parameter ist kein Feld der zugrunde liegenden Tabelle, sondern ein separat definierter Eintrag. Ein Parameter wird nicht in der Suchhilfe ausgegeben sondern dient der Übergabe an den Funktionsbausteins eines Suchhilfe-Exits.
Suchhilfe-Exit Funktionsbaustein
Ein Suchhilfe-Exit ist ein Funktionsbaustein mit einer definierten Schnittstelle. Zur Erstellung eines Suchhilfe-Exits wird am besten der Funktionsbaustein F4IF_SHLP_EXIT_EXAMPLE kopiert, der auch in der Hilfe zum Dynprofeld “Suchhilfe-Exit” erwähnt wird.
In diesem Funktionsbaustein kann die Suchhilfe zu verschiedenen Zeitpunkten manipuliert werden (Datenselektion, Darstellung etc).
Mit Hilfe des Funktionsbausteins F4UT_PARAMETER_VALUE_GET kann der Wert zu einem Parameter aus der Suchhilfe ermittelt werden.
Vorgehen
Ich möchte einen Suchhilfe-Exit erstellen, der aus der Suchhilfe ermittelt, in welchem Feld der Name des Icons steht und in welchem Feld das Icon selbst angezeigt werden soll.
Das Ergebnis sieht so aus:
Lösung
Suchhilfe definieren
Als erstes muss ich in der Transaktion SE11 eine Suchhilfe anlegen:
Suchhilfe-Exit anlegen
Den Suchhilfe-Exit kopiere ich vom Funktionsbaustein F4IF_SHLP_EXIT_EXAMPLE.
Das Coding sieht folgendermaßen aus:
FUNCTION z_f4if_shlp_exit_icon. *"---------------------------------------------------------------------- *"*"Lokale Schnittstelle: *" TABLES *" SHLP_TAB TYPE SHLP_DESCT *" RECORD_TAB STRUCTURE SEAHLPRES *" CHANGING *" VALUE(SHLP) TYPE SHLP_DESCR *" VALUE(CALLCONTROL) LIKE DDSHF4CTRL STRUCTURE DDSHF4CTRL *"---------------------------------------------------------------------- DEFINE get_param. CALL FUNCTION 'F4UT_PARAMETER_VALUE_GET' EXPORTING parameter = &1 fieldname = '*' IMPORTING value = lv_parameter_value TABLES shlp_tab = shlp_tab record_tab = record_tab CHANGING shlp = shlp callcontrol = callcontrol EXCEPTIONS parameter_unknown = 1. IF sy-subrc = 0. &2 = lv_parameter_value. ENDIF. END-OF-DEFINITION. DEFINE icon_create. CALL FUNCTION 'ICON_CREATE' EXPORTING name = &1 info = &2 add_stdinf = '' IMPORTING result = &3 EXCEPTIONS OTHERS = 3. END-OF-DEFINITION. *== Info: * Dieser Baustein kann in Suchhilfen als Suchhilfe-Exit verwendet werden *== Zweck: * Anzeige des Icons zu einem Icon-Namen, der in der Tabelle vorhanden ist *== Voraussetzung: * Spalte mit dem Namen eines Icons * "Tabelle für den Iconnamen, der aus der RESULTTAB ermittelt wird DATA lt_col_iconname TYPE STANDARD TABLE OF icon_name. "Tabelle für den Inhalt der Info zum Icon DATA lt_col_iconinfo TYPE STANDARD TABLE OF icon_text. "Tabelle für das Aufbereitete Icon, das an die RESULTTAB übergeben wird DATA lt_col_icontext TYPE STANDARD TABLE OF icon_text. DATA lv_icontext TYPE icon_text. "Generischer Parameter DATA lv_parameter_value TYPE ddshvalue. "Name der Spalte, die den Iconnamen enthält DATA lv_column_with_icon_name TYPE shlpfield. "Name der Spalte, die den Icontext enthält DATA lv_column_with_icon_info TYPE shlpfield. "Name der Spalte, in der das aufbereitete Icon dargestellt werden soll DATA lv_column_for_display TYPE shlpfield. * EXIT immediately, if you do not want to handle this step IF callcontrol-step <> 'SELONE' AND callcontrol-step <> 'SELECT' AND callcontrol-step <> 'SELONE' AND callcontrol-step <> 'PRESEL' AND callcontrol-step <> 'SELECT' AND callcontrol-step <> 'DISP'. EXIT. ENDIF. *"---------------------------------------------------------------------- * STEP DISP (Display values) *"---------------------------------------------------------------------- IF callcontrol-step = 'DISP'. get_param 'COLUMN_WITH_ICON_NAME' lv_column_with_icon_name. get_param 'COLUMN_WITH_ICON_INFO' lv_column_with_icon_info. get_param 'COLUMN_FOR_ICON_DISPLAY' lv_column_for_display. "Ermitteln aller ICON_NAMEN der einzelnen Einträge CALL FUNCTION 'F4UT_PARAMETER_VALUE_GET' EXPORTING parameter = lv_column_with_icon_name fieldname = '*' TABLES shlp_tab = shlp_tab record_tab = record_tab results_tab = lt_col_iconname CHANGING shlp = shlp callcontrol = callcontrol EXCEPTIONS parameter_unknown = 1 OTHERS = 2. IF sy-subrc = 0. "Wenn alles geklappt hat, dann sind in Tabelle LT_COL_ICONNAME die Namen "der Icons aus dem Parameter COLUMN_WITH_ICON_NAME "Nun noch die die Texte für die Quickinfo ermitteln CALL FUNCTION 'F4UT_PARAMETER_VALUE_GET' EXPORTING parameter = lv_column_with_icon_info fieldname = '*' TABLES shlp_tab = shlp_tab record_tab = record_tab results_tab = lt_col_iconinfo CHANGING shlp = shlp callcontrol = callcontrol EXCEPTIONS parameter_unknown = 1 OTHERS = 2. if sy-subrc > 0. "Macht nichts: Es ist kein Feld definiert/ vorhanden, das zum Icon angezeigt werden soll "Die Tabelle LT_COL_ICONINFO ist dann halt leer endif. LOOP AT lt_col_iconname INTO DATA(lv_iconname). "Info zum Icon lesen: READ TABLE lt_col_iconinfo INTO DATA(lv_iconinfo) INDEX sy-tabix. "Aufbereitung des Icons zur Darstellung icon_create lv_iconname lv_iconinfo lv_icontext. APPEND lv_icontext TO lt_col_icontext. ENDLOOP. ENDIF. "Alle aufbereiteten Icons an RESULTTAB übergeben CALL FUNCTION 'F4UT_PARAMETER_RESULTS_PUT' EXPORTING parameter = lv_column_for_display TABLES shlp_tab = shlp_tab record_tab = record_tab source_tab = lt_col_icontext CHANGING shlp = shlp callcontrol = callcontrol EXCEPTIONS parameter_unknown = 1 OTHERS = 2. IF sy-subrc <> 0. EXIT. ENDIF. EXIT. ENDIF. ENDFUNCTION.
- Interview mit Björn Schulz (Software-Heroes.com) - 3. September 2024
- Daten aus ALV ermitteln - 3. September 2024
- So lange es den SAPGUI noch gibt… - 27. Juni 2024